package thread;

// join 控制线程执行/结束顺序

public class Demo6 {
    public static void main(String[] args) {
        Thread t = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("hello thread");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        t.start();

        System.out.println("main线程 join之前");
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("main 线程 join之后");
    }

    // 打印的时候虽然是并发执行的，但是大概率先执行的是main线程
    // 理由：start之后内核要创建线程是有开销的； start调用的时候为了执行新线程的代码需要做一些准备工作，也是消耗时间的
    // 这就导致了main大概率先出现，但是不是100%确定的事件
}
